<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>参数的传递</title>
    <script>
        function addTen(num) {
             num += 10;
            return num;
        }

        let count = 10;
        let result = addTen(count);
        console.log("count: " + count);//10 正是因为参数的传递是按值传递，所以count的值才会保持不变
        console.log("result: " + result);//20

        //----------------引用数据类型按值传参-------------------

        function setName(obj) {
            obj.name = "zhang san";
        }
        let person = new Object();
        setName(person);
        //经过按值传参后， person的指针和setName中的obj对应的指针指向的是同一个对象，所以此处返回的是 zhang san
        alert(person.name); //zhang san


        /**
         * 引用类型数据按值传参示例二
         * 这个例子就不太好理解了
         *
         * 在执行完setName2的第一行代码后， person2的指针和局部变量obj指针指向的是堆中的同一个对象，所以此时person2.name就是 zhang san
         * 虽然第二行又新建了一个对象，并且将新的指针复制给了局部变量obj，此时局部变量obj的指针指向的是堆中的另一个对象，然后通过第三行代码为
         * obj的name赋值为wang wu，此时并不会影响person2中name的值
         */
        function setName2(obj) {
            obj.name = "zhang san";
            console.log("obj 引用： " + obj)
            obj = new Object();
            obj.name = "wang wu";
        }
        let person2 = new Object();
        setName2(person2);//
        alert(person2.name);//仍然返回zhang san



    </script>
</head>
<body>
参数的传递
</body>
</html>